interface Shape {
    draw(): void;
}

class Rectangle implements Shape {
    public draw(): void {
        console.log('▲');
    }
}

class Circle implements Shape {
    public draw(): void {
        console.log('●');
    }
}

class Square implements Shape {
    public draw(): void {
        console.log('■');
    }
}

class ShapeMaker {
    private circle: Shape;
    private rectangle: Shape;
    private square: Shape;
    public constructor() {
        this.circle = new Circle();
        this.rectangle = new Rectangle();
        this.square = new Square();
    }
    public drawCircle(): void {
        this.circle.draw();
    }
    public drawRectangle(): void {
        this.rectangle.draw();
    }
    public drawSquare(): void {
        this.square.draw();
    }
}

function main() {
    const shapeMaker: ShapeMaker = new ShapeMaker();
    shapeMaker.drawCircle();
    shapeMaker.drawRectangle();
    shapeMaker.drawSquare();
}

main();
